/*  -------------------------- (C) COPYRIGHT 2020 Fortiortech ShenZhen ---------------------------*/
/*  File Name      : Develop.h
/*  Author         : Fortiortech  Appliction Team
/*  Version        : V1.0
/*  Date           : 2020-09-06
/*  Description    : This file contains XX-XX-XX parameter used for Motor Control.
/*  ----------------------------------------------------------------------------------------------*/
/*                                     All Rights Reserved
/*  ----------------------------------------------------------------------------------------------*/

/*  Define to prevent recursive inclusion --------------------------------------------------------*/
#ifndef __DEVELOP_H_
#define __DEVELOP_H_

#include <Customer.h>

#define I_ValueX(Curr_Value)            ((Curr_Value) * (HW_RSHUNT) * (HW_AMPGAIN) / ((HW_ADC_REF)))
#define I_Value(Curr_Value)             _Q15(((Curr_Value) * (HW_RSHUNT) * (HW_AMPGAIN)) / (HW_ADC_REF))
#define I_Value_CT(Curr_Value)            _Q15((Curr_Value/5/HW_ADC_REF))
/*CPU and PWM Parameter*/
#define MCU_CLOCK                      (24.0)                                  // (MHz) 主频

/*double resistor sample Parameter*/
#define DLL_TIME                        (1.0)                                  // 双电阻最小脉宽设置(us),建议值为死区时间值+0.2us以上
/*three resistor overmodule Parameter*/
#define OVERMOD_TIME                    (2.0)                                  // 三电阻过调制时间(us)，建议值2.0
/*deadtime compensation*/
#define DT_TIME                         (0.4)                                  // 死区补偿时间(us)，适用于双电阻和三电阻，建议值是1/2死区时间
/*min pulse*/
#define GLI_TIME                        (0.4)                                  // 桥臂窄脉宽消除(us),建议值0.5

/*Current Calib:enable or disable*/
#define CalibENDIS                      (Enable)

/*SVPWM mode*/
#define SVPWM_5_Segment                 (0)                                                            // 五段式SVPWM
#define SVPWM_7_Segment                 (1)                                                            // 七段式SVPWM
#define SVPMW_Mode                      (SVPWM_7_Segment)

/*double resistor sample mode*/
#define DouRes_1_Cycle                  (0)                                                            // 1 周期采样完 ia, ib
#define DouRes_2_Cycle                  (1)                                                            // 交替采用ia, ib, 2周期采样完成
#define DouRes_Sample_Mode              (DouRes_1_Cycle)


/*根据驱动芯片的类型选择，大部分芯片为High_Level*/
#define High_Level                     (0)                                     // 驱动高电平有效
#define Low_Level                      (1)                                     // 驱动低电平有效
#define UP_H_DOWN_L                    (2)                                     // 上桥臂高电平有效，下桥臂低电平有效
#define UP_L_DOWN_H                    (3)                                     // 上桥臂低电平有效，下桥臂高电平有效

#define Calib_Time                     (1000)                                  // 校正次数，固定1000次，单位:次

/*正常运行时估算算法的参数设置值-------------------------------------------------*/
#define OBS_KSLIDE                     _Q15(0.85)                               // SMO算法里的滑膜增益值
#define E_BW                           (1.5*BASE_FREQ)                          // PLL算法里的反电动势滤波值
//open 算法启动参数
#define MOTOR_OPEN_ACC                 (10.0)                                 // 强拖启动的增量(每载波周期加一次)
#define MOTOR_OPEN_ACC_MIN             (10.0)                                  // 强拖启动的初始速度
#define MOTOR_OPEN_ACC_CNT             (30.0)                                 // 强拖启动的执行次数(MOTOR_OPEN_ACC_CNT*256)
#define MOTOR_OPEN_ACC_CYCLE           (2)                                     // 强拖启动循环拖动的次数

#define ATT_COEF                       (0.85)                                  // 无需改动
/*调速模式*/
#define PWMMODE                         (0)                                                           // PWM调速
#define NONEMODE                        (1)                                                           // 直接给定值，不调速
#define SREFMODE                        (2)                                                           // 直接给定值，不调速

/***正PWMduty or 负PWMduty Choose***/
#define PosiPWMDUTY                    (0)                                                                // 正PWMduty
#define NegaPWMDUTY                    (1)                                                                // 负PWMduty

/*估算器模式选择*/
#define SMO                            (0)                                     // SMO ,滑膜估算
#define PLL                            (1)                                     // PLL ,锁相环

/*顺逆风判断设置*/
#define NoTailWind                     (0)                                     // 无逆风顺风判断
#define TailWind                       (1)                                     // 逆风顺风判断

/*顺逆风判断方法*/
#define RSDMethod                      (0)                                     // RSD比较器方法
#define BEMFMethod                     (1)                                     // BEMF方法，没添加
#define FOCMethod                      (2)                                     // FOC计算方法

/*开环启动模式选择*/
#define Open_Start                     (0)                                     // 开环强拖启动
#define Omega_Start                    (1)                                     // Omega启动
#define Open_Omega_Start               (2)                                     // 先开环启，后Omega启动

/*电流采样模式*/
#define Single_Resistor                (0)                                     // 单电阻电流采样模式
#define Double_Resistor                (1)                                     // 双电阻电流采样模式
#define Three_Resistor                 (2)                                     // 三电阻电流采样模式

/* -----过调制使能----- */
#define OverModulation                 (0)                                     // 0-禁止过调制，1-使能过调制


/*模式选择设置值----------------------------------------------------------------*/
#define IPMtest                         (0)                                                           // IPM测试或者MOS测试，MCU输出固定占空比
#define NormalRun                       (1)                                                           // 正常按电机状态机运行

/*环路选择*/
#define OUTLoop_Disable                 (0)                                                           // 关闭外环
#define OUTLoop_Enable                  (1)                                                           // 使能外环

/*外环选择功率环或速度环*/
#define POWER_LOOP_CONTROL              (0)                                                           //恒功率
#define SPEED_LOOP_CONTROL              (1)                                                           //恒转速
#define VOLTAGE_LOOP_CONTROL            (2)

/*正反转*/
#define CW                             (0)                                     //正转
#define CCW                            (1)                                     //反转
/*硬件过流保护比较值来源*/
#define Compare_DAC                     (0)                                                           // DAC设置硬件过流值
#define Compare_Hardware                (1)                                                           // 硬件设置硬件过流值

#define Long_Inject                     (0)                                     // 脉冲注入时间长于2ms,若时间长于4ms，则要修改定时器分频
#define Short_Inject                    (1)                                     // 脉冲注入时间低于2ms


/*PFC参数设置------------------------------------------------------------------*/
#define PFCEnable                      (0)                                     //       PFC使能
#define PFCPWM_FREQUENCY               (33.0)                                  // (kHz) 载波频率    //65 //80.0
#define PFCPWM_ARR                     (uint16)(MCU_CLOCK * 500 / PFCPWM_FREQUENCY)
#define PFCPWM_ARR_80                  (uint16)(MCU_CLOCK * 500.0 *0.80/ PFCPWM_FREQUENCY)
#define PFCPWM_ARR_60                  (uint16)(MCU_CLOCK * 500.0 *0.60/ PFCPWM_FREQUENCY)

/*AC电压采样分压电路参数*/
#define ACRV1                          (400.0)                                 // (kΩ) AC电压分压电阻1
#define ACRV2                          (200.0)                                 // (kΩ) AC电压分压电阻2
#define ACRV3                          (3.3)                                   // (kΩ) AC电压分压电阻3
#define ACRV                           ((ACRV1 + ACRV2 + ACRV3) / ACRV3)       //      AC电压分压比     //87.2745
#define HW_BOARD_ACVOLT_MAX            (HW_ADC_REF * ACRV)                     // (V)  ADC可测得的最大母线电压    //436.37

/* PFC过流设置 */
#define PFCOverCurrentValue            (35.0)                                   // (A) DAC模式下的PFC过流值
#define PFCOverCurrentProtectEnable    (0)                                     // 使能PFC过流保护

/* PFC电流采样电阻参数设置 */
#define PFC_RSHUNT                     (0.01)
#define PFC_AMPGAIN                    (6.0)

#define PFC_UDCREF                     _Q15(200.0 / HW_BOARD_VOLT_MAX)           //380  目标电压，不要给小于母线电压,且不要大于HW_BOARD_VOLT_MAX
#define PFC_ACMAX                      _Q15(155.0 / HW_BOARD_ACVOLT_MAX)					//310

#define PFC_VOLTAGEPROTECT             _Q15(250.0 / HW_BOARD_VOLT_MAX)           //PFC过压保护440
#define PFC_VOLTAGEPROTECT_RECOVER     _Q15(180.0 / HW_BOARD_VOLT_MAX)           //PFC过压保护恢复值360
#define PFC_VOLTAGEPRO_RECOVEREN        (0)                                      //PFC过压保护恢复使能

#define PFC_UDCREFINC                  (1)
#define PFC_OUTINC                     (5)
#define PFC_OUTDEC                     (40)
#define UDC_OUTINC                     (30)
#define PFC_UKP                         _Q10(3.0)  //7.3  3.0 //2.0  //5.0                       // PFC轴KP4.5//2.50.35  0x6c9
#define PFC_UKI                         _Q15(0.1)  //0.5   //0.005  //0.05                  // PFC轴KI0.09//0.280.13  0x21

#define PFC_UOUTMAX                    _Q15(0.90)                              // 电压环最大限幅值
#define PFC_UOUTMIN                    _Q15(-0.005)                               // 电压环最小限幅值

#define PFC_IKP                        _Q10(3.0)//0X3b00 //0X2500// 0x3000 //0x610   0x400 0x6000 //0x3000                          // PFC轴KP0.32.8//0.48//0.1  0xc10
#define PFC_IKI                        _Q15(0.1)//0X0300 //0x050//0x100//0x1719   0x1000  0x1300 //0x100                         // PFC轴KI0.020.35//0.18   0x1719

#define PFC_IKP1                        _Q10(3.0)                               // PFC轴KP0.32.8//0.48//0.1  0xc10
#define PFC_IKI1                        _Q15(0.1)                               // PFC轴KI0.020.35//0.18   0x1719

#define PFC_IKP2                        _Q10(3.0)                               // PFC轴KP0.32.8//0.48//0.1  0xc10
#define PFC_IKI2                        _Q15(0.1)                               // PFC轴KI0.020.35//0.18   0x1719

#define PFC_IKP3                        _Q10(3.0)                               // PFC轴KP0.32.8//0.48//0.1  0xc10
#define PFC_IKI3                        _Q15(0.1)


#define PFC_IOUTMAX                    _Q15(0.90)                              // 电流环最大限幅值//0.95
#define PFC_IOUTMIN                    _Q15(0.0)                              //0.02

#define KmSetValue                     50.0                                   // PFC的KM系数 150   

#define SAMPLEDIV0                     (1)                                     // 采样频率=载波频率
#define SAMPLEDIV2                     (2)                                     // 采样频率=载波频率/2
#define SAMPLEDIV4                     (4)                                     // 采样频率=载波频率/4
#define SAMPLEDIV8                     (8)                                     // 采样频率=载波频率/8
#define SAMPLEFREQ                     (SAMPLEDIV4)                            // 4

#define UAC_N                          (int8)(1000 * PFCPWM_FREQUENCY / (SAMPLEFREQ * 65 * 32)) // PFC载波频率/65/采样频率系数

#define PFCPIMANUAL                    (1)                                     // PI手动设置
#define PFCPIAUTO                      (2)                                     // PI查表法,还未验证
#define PFCPISET                       (PFCPIMANUAL)


#endif

